<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<!-- 
    闭包，在函数中返回了一个函数
    好处：   变量长期存储在内存中。
            避免全局变量的污染。
            私有成员的存在
    坏处：  常驻内存，增加内存使用量。
            使用不当会很容易造成内存泄露。



 -->
<script>
    // var test = function () {
    //     console.log('q');
    // }();
    //
    // function f() {
    //     console.log('1');
    // };
    // function test() {
    //     var arr = [];//[
    //
    //     for (var i = 0; i < 10; i++) {
    //
    //         (function (n) {
    //             arr[n] = function () {
    //                 document.write(n + "");
    //             }
    //         }(i))
    //     }
    //     return arr;
    // }
    // var myArr = test();
    // console.log(myArr);
    // for (var j = 0; j < 10; j++) {
    //     console.log(myArr[j]);
    //     myArr[j]();
    // }


    //解决方法唯一
    // function test(){
    // 	var arr = [];
    // 	for(var i = 0;i < 10;i++){
    // 		(function (j){
    // 			arr[j] = function(){
    // 				document.write(j + "");
    // 			}
    // 		}(i));
    // 	}
    // 	return arr;
    // }
    // var myArr = test();
    // for(var j = 0;j <10;j++){
    // 	myArr[j]();
    // }

    //经典闭包
    // function a(){
    // 	function b(){
    // 		var bbb = 234;
    // 		document.write(aaa);
    // 	}
    // 	var aaa = 123;
    // 	return b;
    // }
    // var glob = 100;
    // var demo = a();
    // demo();

    //闭包2
    // var demo;
    // function test(){
    // 	var abc = 123;
    // 	function a(){
    // 		console.log(abc);
    // 	}
    // 	demo = a;
    // }
    // test();
    // demo();

    //函数累加器-闭包
    // function add(){
    // 	var num = 0;
    // 	function a(){
    // 		console.log(num++);
    // 	}
    // 	return a;
    // }
    // var myAdd = add();
    // myAdd();
    // myAdd();
    // myAdd();

    //闭包缓存
    // function test(){
    // 	var food = "apple";
    // 	var obj = {
    // 		eatFood : function(){
    // 			if (food !="") {
    // 				console.log('I am eating ' + food);
    // 				food = "";
    // 			}
    // 		},
    // 		pushFood : function(myFood){
    // 			food = myFood;
    // 		}
    // 	}
    // 	return obj;
    // }
    // var person = test();
    // person.eatFood();
    // person.pushFood('banana');
    // person.eatFood();

    //求字符串的字节
    // function reByteslen(target){
    // 	var count = target.length;
    // 	for(var i = 0;i < count;i++){
    // 		if(target.charCodeAt(i) > 255){
    // 			count++;
    // 		}
    // 	}
    // 	console.log(count);
    // }
    // reByteslen("杨衡hhh");

    //练习
    // var hero = {
    // 	_name:'john',
    // 	get:function (){
    // 		return this._name;
    // 	}
    // };
    // var stole = hero.get;
    // console.log(stole());
    // console.log(hero.get());



</script>
</body>
</html>